import axios from "axios";
import router from "./../router";
import { Message } from "element-ui";

/**
 * 跳转登录页
 * 携带当前页面路由，以及在登录页面完成登录后返回当前页面
 */
const toLogin = () => {
  router.replace({
    path: "/",
    query: {
      redirect: router.currentRoute.fullPath,
    },
  });
};

// 创建axios实例
var instance = axios.create();
// 设置最长响应时间
instance.defaults.timeout = 8000;
// 设置post请求头
instance.defaults.headers.post["Content-Type"] =
  "application/json; charset=utf-8";

/**
 * 请求拦截器
 * 每次请求前，如果存在token则在请求头中携带token
 */
instance.interceptors.request.use(
  (config) => {
    // 登录流程控制中，根据本地是否存在token判断用户的登录情况
    // 但是即使token存在，也有可能token是过期的，所以在每次的请求头中携带token
    // 后台根据携带的token判断用户的登录情况，并返回给我们对应的状态码
    // 而后我们可以在响应拦截器中，根据状态码进行一些统一的操作
    const token = "Bearer " + sessionStorage.getItem("token");
    token && (config.headers.Authorization = token);
    return config;
  },
  (error) => Promise.error(error)
);
// 接口错误拦截
instance.interceptors.response.use(
  function(response) {
    let res = response.data;
    // let path = location.hash;
    if (res.code == 200) {
      return res.data;
    }
    // else if (res.status == 401) {
    //   console.log('path', path);
    //   if (path != "#") {
    //     window.location.href = "/#";
    //   }
    //   return Promise.reject(res);
    // }
    else {
      alert(res.msg);
      return Promise.reject(res);
    }
  },
  (error) => {
    if (error.response.status === 401) {
      Message.error("登录过期，请重新登录");
      toLogin();
    }
    return Promise.reject(error);
  }
);

export default instance;
